package com.yonyou.cyxdms.sysAuth.service.service.Login;

import com.yonyou.cyxdms.framework.bean.dto.user_info.LoginInfoDto;
import com.yonyou.cyxdms.sysAuth.service.dto.*;
import com.yonyou.cyxdms.sysAuth.service.vo.user.BindingPhoneVO;
import com.yonyou.cyxdms.sysAuth.service.vo.weChat.SmsWxVo;
import com.yonyou.cyxdms.sysmanage.client.domains.dto.PushMsgDTO;
import com.yonyou.cyxdms.sysmanage.client.domains.dto.UserRoleDTO;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * 用户登录的service
 *
 * @author Administrator
 * @date 2017年6月25日
 */
public interface UserLoginService {

    /**
     * 验证用户名密码是否正确
     *
     * @param userLoginDto
     * @return Map
     * @author maxingjian
     * @since 2018/12/24
     */
     Map<String, Object> login(UserLoginDTO userLoginDto, String userAgent, Integer logWay) throws Exception;

    /**
     * 刷新验证码
     *
     * @param username
     * @param deviceId
     * @return java.util.Map<java.lang.String, java.lang.Object>
     * @author renwd
     * @since 2019/3/7
     */
    Map<String, Object> refreshVerification(String appId, String username, String deviceId) throws IOException;


    /**
     * 获取用户的相关数据
     *
     * @param
     * @return Map
     * @author maxingjian
     * @since 2018/12/24
     */
    public Map<String, Object> appUserData();


    /**
     * 获取用户的相关数据
     *
     * @param
     * @return Map
     * @author maxingjian
     * @since 2019/9/21
     */
    public Map<String, Object> appUserDataNew();

    /**
     * 获取用户的相关数据
     *
     * @param
     * @return Map
     * @author maxingjian
     * @since 2019/9/21
     */
    public Map<String, Object> appBjUserDataNew();


    /**
     * 获取用户的相关数据
     *
     * @param
     * @return Map
     * @author maxingjian
     * @since 2019/9/19
     */
    public List<UserRoleDTO> roleDetail();

    /**
     * 获取用户的相关数据
     *
     * @param
     * @return List<UserRoleDTO>
     * @author maxingjian
     * @since 2019/11/15
     */
    public List<UserRoleDTO> getDetailForPad();

    /**
     * jwt校验用户是否已经登录
     *
     * @param
     * @return String
     * @author maxingjian
     * @since 2018/12/24
     */
    public String appAuthCas();

    /**
     * 获取登录login信息
     *
     * @param
     * @return String
     * @author maxingjian
     * @since 2018/12/24
     */
    public Map<String, String> getLoginUser();

    /**
     * 检查角色是否存在
     *
     * @param
     * @return String
     * @author maxingjian
     * @since 2018/12/24
     */
    public String checkRole();


    /**
     * 获取登录用户信息Dto
     *
     * @param userId
     * @return LoginInfoDto
     * @author maxingjian
     * @since 2018/12/24
     */
    public LoginInfoDto getLoginInfoDto(String userId, String userAgent, boolean flag);

    /**
     * 获取登录用户信息Dto
     *
     * @param role
     * @return LoginInfoDto
     * @author maxingjian
     * @since 2018/12/24
     */
    public String setRole(String role);


    /**
     * 获取登录用户信息Dto
     *
     * @param userRoleDTO
     * @return String
     * @author maxingjian
     * @since 2019/09/16
     */
    public String setUserRole(UserRoleDTO userRoleDTO);

    /**
     * 设置role
     *
     * @param role
     * @param userId
     * @return String
     * @author maxingjian
     * @since 2019/03/12
     */
    public String setRole(String role, String userId);


    /**
     * 获取登录用户信息Dto
     *
     * @param
     * @return String
     * @author maxingjian
     * @since 2018/12/24
     */
    public String getRole(String userId);

    /**
     * 获取登录用户信息Dto
     *
     * @param
     * @return String
     * @author maxingjian
     * @since 2018/12/24
     */
    public UserRoleDTO getUserRole(String userId);

    /**
     * 获取登录用户信息Dto
     *
     * @param
     * @return String
     * @author maxingjian
     * @since 2019/9/17
     */
    public UserRoleDTO getUserAllRole(String userId);


    /**
     * 获取登录用户信息Dto
     *
     * @param
     * @return String
     * @author maxingjian
     * @since 2018/12/24
     */
    public Map<String, Object> getRoles(String userId);

    /**
     * @description：根据员工编号获取登录账号
     * @author ：quankk
     * @date ：Created in 2019/2/28 15:00
     * @modified By：
     */
    EmployeeDTO emp(String appId, String employeeNo);

    /**
     * @description：修改密码
     * @author ：quankk
     * @date ：Created in 2019/3/4 16:07
     * @modified By：
     */
    String updatePassword(PasswordDTO passwordDTO) throws Exception;

    /**
     * @description：退出
     * @author ：quankk
     * @date ：Created in 2019/3/5 11:30
     * @modified By：
     */
    String logout(String jwt,Long userLoginId);

    /**
     * @description：查询当前版本号
     * @author ：quankk
     * @date ：Created in 2019/3/5 16:53
     * @modified By：
     */
    Map<String, String> appVersionNo(String appType, String appId);

    /**
     * @description：
     * @author ：quankk
     * @date ：Created in 2019/3/7 15:36
     * @modified By：
     */
    List<UserDTO> userByCondition(UserDTO userDTO);

    /**
     * @description：更新版本号
     * @author ：quankk
     * @date ：Created in 2019/3/12 14:23
     * @modified By：
     */
    String updateAppVersion(String appType, String appVersion, String appId);

    /**
     * 消息推送
     *
     * @param pushDTO
     * @return
     */
    String pushByUserIdOrEmpNo(PushDTO pushDTO);

    /**
     * 消息推送智慧通
     * @param pushDTO
     * @return
     */
    String pushbyuseridtozht(PushDTO pushDTO, String jwt);


    /**
     * 通用消息推送
     *
     * @param pushMsgDTO
     * @return
     */
    void pushMsg(PushMsgDTO pushMsgDTO);

    /**
     * @description：短信验证码发送
     * @author ：quankk
     * @date ：Created in 2019/5/14 16:27
     * @modified By：
     */
    SendSmsResultDTO sendSms(Short smsType, String phone) throws Exception;

    /**
     * @description：手机号是否绑定
     * @author     ：quankk
     * @date       ：Created in 2019/5/17 15:37
     * @modified By：
     */
//    int ifBinding(String phone);

    /**
     * @description：绑定手机号码
     * @author ：quankk
     * @date ：Created in 2019/5/17 16:16
     * @modified By：
     */
    String bindPhone(BindPhoneDTO bindPhoneDTO);

    /**
     * @author ：quankk
     * @date ：2019/5/21 16:31
     * @description：
     */
    String verifyCheckCode(BindPhoneDTO bindPhoneDTO);

    void comCheckCode(Short smsType, String phone, String checkCode);

    /**
     * @author ：quankk
     * @date ：2019/5/21 17:32
     * @description：
     */
    String forgetUpdatePassword(PasswordDTO passwordDTO) throws Exception;

    /**
     * @author ：quankk
     * @date ：2019/5/22 11:56
     * @description：
     */
    String bindWeChart(BindPhoneDTO bindPhoneDTO);

    /**
     * @author ：quankk
     * @date ：2019/5/22 15:09
     * @description：
     */
    EmpInfoDTO empInfo();

    /**
     * @author ：quankk
     * @date ：2019/5/22 16:05
     * @description：
     */
    String updateEmpInfo(EmpInfoDTO empInfoDTO);

    /**
     * @author ：adu
     * @date ：2019/8/19 15:26
     * @description：
     */
    Map<String, Object> initUserData();

    /**
     * @author ：quankk
     * @date ：2019/7/8 16:20
     * @description：
     */
    List<MenuVueDto> getMenus();


    /**
     * @author ：quankk
     * @date ：2019/7/8 16:20
     * @description：
     */
    List<MenuVueDto> getFavoriteMenus();

    /**
     * @author ：quankk
     * @date ：2019/7/8 17:17
     * @description：
     */
    List<Map> handles();


    void verificationCode(String phone, String appId, Integer bindingPhone);

    void bindingPhone(BindingPhoneVO bindingPhoneVO);

    /**
     * 用户绑定手机号
     *
     * @author ：李贺
     * @date ：2019/12/5
     */
    SmsWxVo getSmsWx(String appId);

    /**
     * 获得头像
     *
     * @author ：李贺
     * @date ：2019/12/5
     */
    String getHeadPortrait();

    /**
     * 验证token
     *
     * @author ：包捷
     * @date ：2022/05/10
     * @return
     */
    public Map getUserInfoByToken(String token);
}


